package com.treeroot.treenet.protocol.tcp;

import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

public class TcpUtil {

    /**
     * 构建 TCP 响应 ByteBuffer，格式必须与请求一致：
     * 魔数(2) + 版本(1) + 编码(1) + 长度(4) + 数据体(N)
     */
    public static ByteBuffer buildResponse(short magic, byte version, byte encoding, String responseStr) {
        Charset charset;
        switch (encoding) {
            case 1:
                charset = StandardCharsets.UTF_8;
                break;
            case 2:
                charset = Charset.forName("GBK");
                break;
            default:
                throw new RuntimeException("不支持的编码类型: " + encoding);
        }

        byte[] responseBody = responseStr.getBytes(charset);
        ByteBuffer buffer = ByteBuffer.allocate(2 + 1 + 1 + 4 + responseBody.length);
        // 魔数
        buffer.putShort(magic);
        // 协议版本
        buffer.put(version);
        // 编码类型
        buffer.put(encoding);
        // 数据体长度
        buffer.putInt(responseBody.length);
        // 数据体
        buffer.put(responseBody);

        buffer.flip(); // 为读取准备
        return buffer;
    }
}
